AI视觉手势/人脸跟踪传感器

产品简介

这是一款16bit高分辨率DAC模块,满量程误差仅±0.2%,支持I2C或PWM信号驱动,可灵活配置为0-5V、0-10V电压信号,或4-20mA电流信号输出,适配多场景控制需求。

模块兼容Arduino编程环境,广泛适配ESP32、树莓派、STM32等主控,可直接驱动灯光、水泵、伺服电机等需上述信号控制的设备,简单易用。

本产品属于DAC系列模块,该系列模块都能通过 I2C 或 PWM 信号控制,输出电压或电流,且提供丰富选型:分辨率涵盖8bit、12bit、15bit、16bit,通道可选1通道/ 2通道,还支持多模块级联,可灵活组合为多通道输出方案。

产品特性

  • 支持3.3V-5V电源供电,标准Gravity接口。
  • 支持I2C/PWM信号输入,适配广泛。
  • 16bit分辨率、满量程误差为0.2% 。
  • 支持输出0-5V、0-10V模拟电压信号。
  • 支持输出4-20mA模拟电流信号。
  • 支持1.2倍超量程电压信号输出。
  • 支持Arduino编程,适配ESP32、Arduino等主控。
  • 8路I2C地址可调,最多可同时控制8路设备。

应用场景

  • 电机控制
  • 灯光亮度控制
  • 阀门水泵控制
  • 信号发生器
  • 小型设备的自动化改造

产品参数

基本参数

  • 芯片型号:GP8600
  • 工作电压:3.3V-5V
  • 供电/通讯接口:PH2.0-4P/3P
  • 输入信号:I2C/PWM
  • 输出信号:
    • 电流输出范围:0-20mA
    • 电压输出范围:0-6V/0-12V
  • 通道数:1通道
  • 分辨率:16bit(I2C)/8bit、10bit(PWM:可根据主控选择)
  • 满量程误差:±0.2%(拟合校准后实测误差)
  • 数值范围:
    • I2C模式:0-65535对应0-6V或0-12V或0-20mA
    • PWM模式:
      • 0 - 255对应0-6V或0-12V或0-20mA
      • 0 - 1023对应0-6V或0-12V或0-20mA

物理尺寸

  • PCB尺寸:38×32×12.39 mm
  • 安装孔间距:25 mm
  • 安装孔直径:3.0 mm

功能示意图

硬件接口说明

模块接口分为 I2C 输入接口、PWM 输入接口与输出接口三类,各引脚功能定义如下表所示:

接口类型 引脚丝印 功能描述
I2C 输入接口 + 电源正极(供电输入3.3V-5V)
- 电源负极(接地)
SCL I2C 时钟线 SCL
SDA I2C 数据线 SDA
PWM 输入接口 - 电源负极(接地)
+ 电源正极(供电输入3.3V-5V)
D PWM 信号输入引脚
输出接口 OUT 输出信号正极(电压/电流)范围:0-5V 0-6V 0-10V 0-12V 0-20mA 4-20mA
GND 输出信号负极

拨码开关配置逻辑

拨码开关(A0、A1、A2)用于切换I2C 地址与PWM 输出范围,需根据控制方式选择对应配置,不可混用。

I2C 模式:配置模块 I2C 地址

通过 A0、A1、A2 的 “0(断开)/1(闭合)” 组合,定义模块的 I2C 通信地址,默认地址为0x58(A0/A1/A2 均为 0)。

A2 A1 A0 ADDR
0 0 0 0x58
0 0 1 0x59
0 1 0 0x5A
0 1 1 0x5B
1 0 0 0x5C
1 0 1 0x5D
1 1 0 0x5E
1 1 1 0x5F

PWM模式:配置输出信号范围

仅需关注 A0、A1、A2 的特定组合,即可定义 PWM 控制下的输出类型(电压 / 电流)及范围。

在PWM模式下,A0不能为1,否则可能损坏器件。

A2 A1 A0 OUT
1 1 0 0-20mA
0 0 0 0-6V
0 1 0 0-12V

Arduino IDE 使用教程

例程1:I2C 模式下 0-5V 量程输出 5V

目标

通过 ESP32-E 主控上的 I2C 接口与 GP8600 模块通信,控制模块 0-5V 量程输出 5V 电压,并用万用表验证结果。

步骤 1:接线配置

按图示连接 GP8600 模块与 ESP32-E,核心对应关系:

  • 模块 I2C 引脚 “+” → ESP32-E 3.3V
  • 模块 I2C 引脚 “-” → ESP32-E GND
  • 模块 I2C 引脚 “SCL” → ESP32-E SCL(默认 GPIO22)
  • 模块 I2C 引脚 “SDA” → ESP32-E SDA(默认 GPIO21)
  • 拨码开关配置:A0=0、A1=0、A2=0(I2C 地址 = 0x58)

步骤 2:代码上传

打开 Arduino IDE,复制以下代码并上传至 ESP32-E:

#include <DFRobot_GP8XXX.h>

// 启用I2C通信模式
#define I2C_COMMUNICATION

// I2C地址(根据模块背面设置修改,默认0x58)
#define MODULE_I2C_ADDRESS 0x58
DFRobot_GP8600_I2C GP8600(&Wire, MODULE_I2C_ADDRESS);

void setup() {
  // 初始化串口通信
  Serial.begin(9600);
  
  // 初始化传感器,失败则持续重试
  while(GP8600.begin() != 0) {
    Serial.println("Communication with the device failed. Please check if the connection is normal or if the device address is set correctly.");
    delay(1000);
  }
  Serial.println("Successful connection!");
  
  // 设置DAC输出量程为0-5V
  GP8600.setDACOutRange(GP8600.eOutputRange5V);
  
  // 设置输出数据(0-65535对应0-5V)
  uint16_t data = 65535;
  GP8600.setDACOutData(data);
}

void loop() {
  // 循环中无需执行操作
}
    

步骤 3:结果验证

  1. 万用表调至 “DC V” 档;
  2. 红表笔接模块“OUT”端,黑表笔接模块“GND”端;
  3. 正常情况测得电压接近 5V,此示例中测得实际输出电压为 5.009V。

例程2:PWM 模式下 4-20mA 量程输出 20mA

目标

通过 ESP32-E 主控上的 PWM 接口与 GP8600 模块通信,控制模块 4-20mA 量程输出 20mA,并用万用表验证结果。

步骤 1:接线配置

按图示连接模块与 ESP32-E,核心对应关系:

  • 模块 PWM 接口 “+” → ESP32-E 3.3V
  • 模块 PWM 接口 “-” → ESP32-E GND
  • 模块 PWM 接口 “D” → ESP32-E GPIO13(PWM 输出引脚)
  • 拨码开关配置:A0=0、A1=1、A2=1(输出范围 = 4-20mA)

步骤 2:代码上传

打开 Arduino IDE,复制以下代码并上传至 ESP32-E:

#include <DFRobot_GP8XXX.h>

// 定义PWM引脚为13(适用于ESP32)
const int pwmPin = 13;
DFRobot_GP8600_PWM GP8600(pwmPin);

void setup() {
  // 初始化传感器
  GP8600.begin();
  
  // 设置输出数据(ESP32在PWM模式下范围为0-1023)
  double data = 1023;  // 最大输出值
  GP8600.setDACOutData(max(data, 42.5));
}

void loop() {

}

步骤 3:结果验证

  1. 万用表调至 “DC A” 档;
  2. 红表笔接模块“OUT”端,黑表笔接模块“GND”端
  3. 正常情况测得电流接近 20mA,此示例中测得实际输出电流为20.12mA

API函数

/**************************************************************************
                                  I2C & PWM 系列
  **************************************************************************/
    /**
     * @fn begin
     * @brief 初始化函数
     * @return 返回0表示成功,其他值表示失败 
     */
    int begin(void);

    /**
     * @fn setDACOutRange
     * @brief 设置DAC输出范围(仅I2C模式下有效)
     * @param range DAC输出范围
     * @n  eOutputRange5V(0-5V)
     * @n  eOutputRange6V(0-6V)       GP8630N、GP8600
     * @n  eOutputRange10V(0-10V)     
     * @n  eOutputRange_10V(-10-0V)   GP8630N
     * @n  eOutputRange_12V(-12-0V)   GP8630N
     * @n  eOutputRange12V(0-12V)     GP8630N、GP8600
     * @n  eOutputRange20MA(0-20mA)
     * @n  eOutputRange24MA(0-24mA)   GP8630N、GP210 
     * @return NONE
     */        
    void setDACOutRange(eOutPutRange_t range);

    /**
     * @fn setDACOutData
     * @brief 设置单通道模块输出DAC值
     * @param data DAC值
     * @note  PWM模式下根据PWM脉宽输出电流/电压值,根据模块背面的丝印,拨码选择电流/电压输出范围
     * @note  I2C模式下根据setDACOutRange()设置的输出范围输出电流/电压值
     * @return NONE
     */
    void setDACOutData(uint16_t data);

DAC 精度及校准教程

DAC 精度及校准概述

DAC(数模转换器)的精度是指其实际输出值与理想输出值之间的接近程度。精度越高,偏差越小。

校准的目的:

DAC模块因内部元器件差异或使⽤环境影响,其输出可能存在“偏移”和“增益”误差。拟合校准的核心是通过数学拟合算法修正原始输出偏差,建立 “程序控制参数” 与 “实际输出值” 的精准映射关系,从而大幅提升精度。

DAC 校准实操教程(PWM 模式・0-6V 量程)

本教程以 PWM 模式 “0-6V 量程(程序参数范围 0-1023)” 为例,采用线性拟合算法,通过 Excel 表格快速计算校准参数,步骤简洁易懂,无需复杂编程。

校准前提

硬件准备:

软件准备:

  • Excel 表格(用于计算校准参数)
  • DAC 控制程序

环境要求:

  • 环境温度稳定(避免温漂影响测量)
  • 电源电压无明显波动

数据采集与准备

采集要求

  • 选取 5 组及以上中间值程序参数(不可选量程端点 0 或 1023):端点数据易受硬件极限特性影响,可能导致拟合曲线偏离实际工作区间,中间值可保证拟合精度;
  • 程序参数均匀分布:覆盖 0-1023 全范围(如示例中的 171、341、512、682、853,对应理论输出 1-5V),确保拟合曲线覆盖整个量程。

步骤 1:原始数据记录

按选定的程序参数配置 DAC,用万用表测量实际输出电压,记录如下表格(示例数据):

程序参数(x) 理论输出电压(V) 实际输出电压(V) 绝对误差(V) 满量程误差
0 0 0.0014 0.0014 0.0233%
171 1 0.9928 -0.0072 -0.1200%
341 2 1.9923 -0.0077 -0.1283%
512 3 2.9867 -0.0133 -0.2217%
682 4 3.9882 -0.0118 -0.1967%
853 5 4.9848 -0.0152 -0.2533%
1023 6 5.9942 -0.0058 -0.0967%

注:表格中 0 和 1023 仅用于展示满量程误差,拟合计算时需排除端点数据,仅用中间 5 组(171、341、512、682、853)。

校准参数计算(Excel 工具)

通过 Excel 表格的线性拟合函数,计算校准所需的变换系数 c变换偏移 o,核心逻辑是修正原始 “程序参数 - 实际输出” 的线性偏差。

步骤 2:输入数据到 Excel

在 Excel 中按如下格式输入中间 5 组数据(示例单元格范围):

单元格 内容(程序参数 x) 单元格 内容(实际输出电压 y)
B11 171 D11 0.9928
B12 341 D12 1.9923
B13 512 D13 2.9867
B14 682 D14 3.9882
B15 853 D15 4.9848

步骤 3:计算原始斜率k

斜率 k 表示原始状态下 “程序参数变化” 与 “实际输出变化” 的线性关系,excel表格公式如下:

=SLOPE(D11:D15, B11:B15)
  • 含义:D11:D15 为实际输出电压范围,B11:B15 为对应程序参数范围,计算两者的线性斜率。

步骤 4:计算原始截距b

截距 b 表示程序参数为 0 时的实际输出偏移,excel表格公式如下:

=INTERCEPT(D11:D15, B11:B15)
  • 含义:基于线性方程 y = k*x + b,计算截距 b。

步骤 5:计算变换系数 c

系数 c 用于修正原始斜率偏差,使输出符合理论量程,excel表格公式如下:

=(理论最大电压 / 最大程序参数) / k
  • 示例代入:理论最大电压 = 6V,最大程序参数 = 1023,因此excel表格公式为:
=(6/1023)/k
  • 含义:将原始斜率 k 修正为符合理论量程的理想斜率。

步骤 6:计算变换偏移 o

偏移 o 用于抵消原始截距偏差,excel表格公式:

=-b/k
  • 含义:通过偏移补偿,消除程序参数为 0 时的固有输出偏差。

步骤 7:代码集成与生效

将 Excel 计算得到的c(变换系数)o(变换偏移) 代入 DAC 控制程序,通过校准公式实时修正程序参数,确保实际输出接近理论值。

校准公式:

y = c * x0 + o
  • 说明:y = 校准后程序参数(最终写入 DAC 的控制值);x0 = 原始目标程序参数(未校准,由理论输出电压计算得出)。
  • 带入上述计算的变换系数及变换偏移值得到的完整校准公式为:y=1.0020 * x0 + 1.1550

代码示例

将获得的c(变换系数) 和o(变换偏移)值填入下方代码

然后就能根据拟合校准算法得到更准确的数据了,完整代码如下:

#include <DFRobot_GP8XXX.h>

// 固定ESP32平台PWM引脚为13,无需多平台适配
const int pwmPin = 13;
DFRobot_GP8600_PWM GP8600(pwmPin);

/**
 * @brief 校准函数(ESP32专用,匹配0-6V量程)
 * @param data 原始未校准程序参数(0-1023)
 * @param coefficient 拟合校准系数c(Excel计算得出)
 * @param offset 拟合校准偏移量o(Excel计算得出)
 * @return 校准后PWM控制参数(0-1023)
 */
uint16_t calibrationFun(uint16_t data ,double coefficient ,double offset)
{
  double tempdata = data * coefficient + offset;
  // ESP32平台PWM参数范围固定为0-1023(对应0-6V),直接限幅
  if(tempdata > 1023) tempdata = 1023;
  if(tempdata < 0) tempdata = 0;

  Serial.print("校准后PWM参数:");
  Serial.println((uint16_t)tempdata);
  return (uint16_t)tempdata;
}

void setup() {
  // 初始化串口(用于调试查看校准参数)
  Serial.begin(115200);
  // 初始化GP8600模块(PWM模式)
  GP8600.begin();
  
  /**
   * @brief 0-6V量程输出配置(ESP32专用)
   * @note 1. 模块拨码开关需配置为0-6V输出(参考模块背面说明)
   * @note 2. ESP32平台PWM参数范围0-1023,对应输出0-6V
   * @note 3. 如需启用校准,将下方data传入calibrationFun即可
   */
  uint16_t data = 1023; // 原始目标程序参数(未校准,由理论输出电压计算得出)
  
  //启用校准(替换为实际计算的coefficient和offset)
  GP8600.setDACOutData(calibrationFun(data, caliCoeff, caliOffset));
}

void loop() {

}

更多资料下载